<?php
/**
 * 邀请码生成和反解密计算
 * @文件名称: Math.php
 * @author: jawei
 * @Email: gaozhiwei@etcp.cn
 * @Date: 2017-06-06
 * @Copyright: 2017 悦畅科技有限公司. All rights reserved.
 * 注意：本内容仅限于悦畅科技有限公司内部传阅，禁止外泄以及用于其他的商业目的
 */
namespace app\lib;
use yii;
class Math extends EtcpApi
{
    /**
     * 邀请码的生成所需字符
     * duotricemary character list
     * @var array
     */
    static private $duotricemaryList = [
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        'A', 'B', 'C', 'D', 'E', 'F',
        'G', 'H', 'J', 'K', 'L', 'M',
        'N', 'P', 'Q', 'R', 'T', 'U',
        'V', 'W', 'X', 'Y'
    ];
    /**
     * 邀请码的生成计算
     * @param   String  $in 传递的需要转换为邀请码的channel_Id字符串
     * @return  string
     */
    public static function dec2duo($in)
    {
        $stepVal = (int)$in;
        $outStr = "";
        while ($stepVal > 0) {
            $curVal = fmod($stepVal, 32);
            $outStr = self::$duotricemaryList[$curVal] . $outStr;
            $stepVal = $stepVal >> 5;
        }
        return $outStr;
    }
    /**
     * 邀请码的反解密计算
     * @param   String  $inStr  需要反解密的邀请码
     * @return  Integer 反解密之后的数据channel_Id值
     */
    public static function duo2dec($inStr)
    {
        $inStr = strtoupper(trim($inStr));
        $out = 0;
//        if (strlen($inStr) != 7) {
//            return -1;
//        }
        for ($i = 0; $i < strlen($inStr); $i++) {
            if (array_search($inStr[$i], self::$duotricemaryList) === false) {
                return -1;
            }
            $out = ($out * 32) + array_search($inStr[$i], self::$duotricemaryList);
        }
        return $out;
    }
}
